package com.codefish.codefish_blog.utils;

import java.lang.reflect.Field;
import java.util.Map;

/**
 * hashmap和对象相互转换
 *
 * @author codefish
 * @version 1.0
 * @date 2022/04/11 下午 05:33
 */
public class MapAndObjectUtil {
    /**
     * 通过反射将map转为object
     *
     * @param map         map对象
     * @param targetClass 目标对象类
     * @param <T>         目标对象类型
     * @return 目标object
     */
    public static <T> T mapToObject(Map<String, Object> map, Class<T> targetClass) {
        //目标对象
        T obj = null;
        try {
            //通过反射通过无参构造函数实例化对象
            obj = targetClass.newInstance();
            //遍历map，将field和对于的value填充到obj中
            for (String s : map.keySet()) {
                try {
                    Field field = targetClass.getDeclaredField(s);
                    field.setAccessible(true);
                    field.set(obj, map.get(s));
                } catch (Exception e) {
                    //忽略异常
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }

}
